package com.lframework.starter.web.core.annotations.timeline;

import com.lframework.starter.web.core.components.timeline.OrderTimeLineBizType;
import com.lframework.starter.web.inner.components.timeline.NormalOrderTimeLineBizType;

import java.lang.annotation.*;

/**
 * 单据时间轴记录
 * 如果出现嵌套那么以最外层的为准，不会进行嵌套隔离
 *
 * @author zmj
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface OrderTimeLineLog {

    /**
     * 业务类型
     *
     * @return
     */
    Class<? extends OrderTimeLineBizType> type() default NormalOrderTimeLineBizType.class;

    /**
     * 单据ID
     *
     * @return
     */
    String[] orderId();

    /**
     * 内容 需要填充参数部分用{}占位，会根据params的值进行填充
     *
     * @return
     */
    String name() default "";

    /**
     * 需要保存的参数 Spel表达式
     *
     * @return
     */
    String[] params() default {};

    /**
     * 是否循环填充内容 会将params中的collection循环format
     *
     * @return
     */
    boolean loopFormat() default false;

    /**
     * 是否为删除操作
     * 如果为删除操作，那么忽略type、name、loopFormat，直接根据orderId进行删除操作
     *
     * @return
     */
    boolean delete() default false;
}
